জাভা জেনেরিক্সে Wildcard (?) হলো এমন একটি বিশেষ প্রতীক যা জেনেরিক টাইপ প্যারামিটারের স্থানে ব্যবহৃত হয়। এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে জেনেরিক টাইপ সম্পর্কে সম্পূর্ণ নিশ্চিত হওয়া প্রয়োজন হয় না। Wildcard বিভিন্ন টাইপের ডেটা সঙ্গে কাজ করতে দেয়, তবে নিরাপত্তা বজায় রাখে।
Wildcards কেন প্রয়োজন?
জেনেরিক ক্লাস বা মেথডের সাথে কাজ করার সময় কখনো কখনো টাইপ সম্পর্কে সম্পূর্ণ নির্দিষ্ট না হওয়া দরকার হয়। উদাহরণস্বরূপ, যদি আপনার কোড একাধিক টাইপ গ্রহণ করতে পারে তবে Wildcards ব্যবহার করা হয়।
সাধারণ ব্যবহার:
- যখন ক্লাস বা মেথডে যেকোনো ডেটা টাইপ কাজ করবে।
- টাইপ সীমাবদ্ধতা নির্ধারণের সময়।
Wildcards এর ধরন
1. Unbounded Wildcard (?)
Unbounded Wildcard ব্যবহার করা হয় যখন টাইপের কোনো সীমাবদ্ধতা নেই। এটি যেকোনো টাইপ গ্রহণ করতে পারে।
উদাহরণ:
import java.util.List;
public class UnboundedWildcardExample {
public static void printList(List<?> list) {
for (Object obj : list) {
System.out.println(obj);
}
}
public static void main(String[] args) {
List<String> stringList = List.of("Java", "Generics", "Wildcard");
List<Integer> intList = List.of(1, 2, 3);
printList(stringList);
printList(intList);
}
}
বিস্তারিত:
List<?>মানে যে কোনো টাইপের লিস্ট গ্রহণ করা যাবে।- এটি Type Safety বজায় রাখে, তবে মডিফাই করার অনুমতি দেয় না।
2. Upper-Bounded Wildcard (<? extends Type>)
Upper-Bounded Wildcard ব্যবহার করা হয় যখন টাইপ কোনো নির্দিষ্ট ক্লাস বা এর সাবক্লাস হতে হবে।
উদাহরণ:
import java.util.List;
public class UpperBoundedWildcardExample {
public static double calculateSum(List<? extends Number> list) {
double sum = 0.0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<Double> doubleList = List.of(1.5, 2.5, 3.5);
System.out.println("Sum of Integers: " + calculateSum(intList));
System.out.println("Sum of Doubles: " + calculateSum(doubleList));
}
}
বিস্তারিত:
<? extends Number>নির্দেশ করে যে এটিNumberঅথবা এর সাবক্লাস (Integer,Double, ইত্যাদি`) হতে হবে।- এটি Read-Only অপারেশনগুলোকে অনুমোদন করে।
3. Lower-Bounded Wildcard (<? super Type>)
Lower-Bounded Wildcard ব্যবহার করা হয় যখন টাইপ একটি নির্দিষ্ট ক্লাস বা তার সুপারক্লাস হতে হবে।
উদাহরণ:
import java.util.List;
import java.util.ArrayList;
public class LowerBoundedWildcardExample {
public static void addElements(List<? super Integer> list) {
list.add(1);
list.add(2);
list.add(3);
}
public static void main(String[] args) {
List<Number> numberList = new ArrayList<>();
addElements(numberList);
System.out.println(numberList);
}
}
বিস্তারিত:
<? super Integer>নির্দেশ করে যে এটিIntegerঅথবা তার সুপারক্লাস (Number,Object, ইত্যাদি`) হতে হবে।- এটি Write-Only অপারেশনগুলোকে অনুমোদন করে।
Wildcards-এর সুবিধা
- টাইপ ফ্লেক্সিবিলিটি: একই মেথড বা ক্লাস বিভিন্ন টাইপের সঙ্গে কাজ করতে পারে।
- টাইপ সেফটি বজায় রাখা: Wildcards টাইপ সেফটি নিশ্চিত করে।
- কোড পুনঃব্যবহারযোগ্যতা: একবার লিখে কোড বিভিন্ন টাইপের জন্য ব্যবহার করা যায়।
Wildcards-এর সীমাবদ্ধতা
- টাইপ অস্পষ্টতা: কখনো কখনো Wildcards কোড পড়তে এবং বুঝতে অস্পষ্ট হতে পারে।
- Read-Only বা Write-Only সীমাবদ্ধতা: Upper-Bounded Wildcard শুধুমাত্র পড়ার অনুমতি দেয়, Lower-Bounded Wildcard শুধুমাত্র লেখার অনুমতি দেয়।
Java Generics-এ Wildcards (?) ডেটা টাইপের সীমাবদ্ধতা নির্ধারণ করে কোডকে আরও ফ্লেক্সিবল এবং নিরাপদ করে। এটি এমন পরিস্থিতিতে অত্যন্ত কার্যকর যেখানে বিভিন্ন টাইপের ডেটা ব্যবহৃত হয়। Unbounded, Upper-Bounded, এবং Lower-Bounded Wildcards ব্যবহার করে বিভিন্ন ধরণের প্রয়োজন মেটানো সম্ভব।
Wildcards হলো জাভা জেনেরিক্সের একটি ফিচার যা ডেটা টাইপের নির্দিষ্ট সীমা না দিয়ে জেনেরিক টাইপকে আরও নমনীয় করে তোলে। এটি জেনেরিক কোডে ডেটা টাইপের সংজ্ঞা নির্ধারণ না করেও বিভিন্ন টাইপের ডেটা ব্যবস্থাপনা করার অনুমতি দেয়। Wildcards সাধারণত ? চিহ্ন দিয়ে বোঝানো হয়।
Wildcards কী?
Wildcards হলো Generics-এ ব্যবহৃত একটি বিশেষ চিহ্ন (?) যা একটি অজানা টাইপকে নির্দেশ করে। এটি নিম্নলিখিত ধরণের কেসে ব্যবহৃত হয়:
- Unbounded Wildcard:
? - Upper Bounded Wildcard:
? extends Type - Lower Bounded Wildcard:
? super Type
Wildcards এর প্রকারভেদ
১. Unbounded Wildcard (?)
Unbounded Wildcard নির্দেশ করে যে এটি যেকোনো ডেটা টাইপ হতে পারে।
উদাহরণ:
public static void printList(List<?> list) {
for (Object obj : list) {
System.out.println(obj);
}
}
public static void main(String[] args) {
List<String> stringList = List.of("A", "B", "C");
List<Integer> intList = List.of(1, 2, 3);
printList(stringList); // Works with String
printList(intList); // Works with Integer
}
ফলাফল:
A
B
C
1
2
3
২. Upper Bounded Wildcard (? extends Type)
Upper Bounded Wildcard নির্দেশ করে যে টাইপটি নির্দিষ্ট ক্লাস বা তার সাবক্লাস হতে হবে। এটি ব্যবহার করা হয় যখন একটি জেনেরিক মেথড শুধুমাত্র নির্দিষ্ট টাইপের ডেটার সাথে কাজ করবে।
উদাহরণ:
public static double sumList(List<? extends Number> list) {
double sum = 0.0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<Double> doubleList = List.of(1.1, 2.2, 3.3);
System.out.println("Sum of Integer List: " + sumList(intList));
System.out.println("Sum of Double List: " + sumList(doubleList));
}
ফলাফল:
Sum of Integer List: 6.0
Sum of Double List: 6.6
৩. Lower Bounded Wildcard (? super Type)
Lower Bounded Wildcard নির্দেশ করে যে টাইপটি নির্দিষ্ট ক্লাস বা তার সুপারক্লাস হতে হবে। এটি সাধারণত রাইট অপারেশনের জন্য ব্যবহৃত হয়।
উদাহরণ:
public static void addNumbers(List<? super Integer> list) {
list.add(10);
list.add(20);
}
public static void main(String[] args) {
List<Number> numberList = new ArrayList<>();
addNumbers(numberList);
System.out.println(numberList);
}
ফলাফল:
[10, 20]
Wildcards এর ব্যবহার
Wildcards এবং Collections Framework
Wildcards সাধারণত জাভার Collections Framework-এ ব্যবহার করা হয়, যেখানে একাধিক ডেটা টাইপকে হ্যান্ডেল করতে হয়।
উদাহরণ:
public static void printCollection(Collection<?> collection) {
for (Object obj : collection) {
System.out.println(obj);
}
}
Wildcards এবং Generics এর সীমাবদ্ধতা
Wildcards ব্যবহার করার সময় কিছু অপারেশন সীমাবদ্ধ থাকে। যেমন:
- Upper bounded wildcard (
? extends) দিয়ে ডেটা যোগ করা সম্ভব নয়। - Lower bounded wildcard (
? super) দিয়ে পড়া সম্ভব নয়।
উদাহরণ:
List<? extends Number> list = new ArrayList<>();
list.add(1); // Compile-time error
Wildcards এর সুবিধা
- Code Flexibility:
Wildcards ব্যবহার করলে একই মেথড বা ক্লাস বিভিন্ন টাইপের সাথে কাজ করতে পারে। - Reusable Methods:
Wildcards জেনেরিক মেথডগুলোকে আরও পুনঃব্যবহারযোগ্য করে তোলে। - Type Safety:
Wildcards টাইপ সেফটি নিশ্চিত করে এবং রানটাইম ত্রুটি এড়ায়। - Collections Framework:
Collections Framework-এ Wildcards ব্যবহার করে ডেটা টাইপের সীমাবদ্ধতা নির্ধারণ করা সহজ হয়।
Wildcards এর সীমাবদ্ধতা
- Write এবং Read সীমাবদ্ধতা:
? extendsদিয়ে শুধু পড়া যায়, কিন্তু লেখা যায় না।? superদিয়ে লেখা যায়, কিন্তু পড়া সীমিত।
- বেশি জটিল লজিক:
জটিল টাইপিংয়ের কারণে কোড বুঝতে কিছুটা সময় লাগতে পারে।
Wildcards হলো জাভা জেনেরিক্সের একটি গুরুত্বপূর্ণ অংশ যা মেথড এবং ক্লাসকে বিভিন্ন ডেটা টাইপের সাথে কাজ করতে দেয়। এটি টাইপ সেফটি এবং কোড পুনঃব্যবহারযোগ্যতার সুবিধা দেয়। বিভিন্ন টাইপের ডেটা হ্যান্ডেল করার জন্য Wildcards অপরিহার্য এবং Collections Framework-এ এর ব্যাপক ব্যবহার রয়েছে।
Java Generics-এ Unbounded Wildcards হলো একটি বিশেষ বৈশিষ্ট্য, যা <?> চিহ্ন দ্বারা বোঝানো হয়। এটি এমন একটি wildcard টাইপ যা যেকোনো টাইপকে গ্রহণ করতে পারে। <?> সাধারণত তখন ব্যবহার করা হয়, যখন মেথড বা ডেটা স্ট্রাকচারে টাইপ প্যারামিটারটি গুরুত্বপূর্ণ নয় বা নির্দিষ্ট টাইপের উপর নির্ভর করে না।
Unbounded Wildcards এর ব্যবহার:
<?> ব্যবহার করে নিম্নলিখিত ক্ষেত্রে কাজ করা হয়:
- ডেটার টাইপ নির্দিষ্ট না থাকলে।
- মেথড শুধুমাত্র ডেটা পড়ার জন্য ব্যবহৃত হলে (write অপারেশন প্রয়োজন না হলে)।
- বিভিন্ন টাইপের Collection এর সাথে কাজ করার সময়।
Syntax:
Collection<?> collection = new ArrayList<>();
উদাহরণ এবং ব্যবহার:
1. Unbounded Wildcard দিয়ে একটি মেথড:
import java.util.List;
public class UnboundedWildcardExample {
// Method with unbounded wildcard
public static void printList(List<?> list) {
for (Object element : list) {
System.out.println(element);
}
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<String> strList = List.of("A", "B", "C");
// Unbounded wildcard method calls
printList(intList); // Works with Integer list
printList(strList); // Works with String list
}
}
আউটপুট:
1
2
3
A
B
C
2. Unbounded Wildcard এবং Collections:
import java.util.ArrayList;
import java.util.List;
public class CollectionExample {
public static void displayCollection(List<?> collection) {
for (Object obj : collection) {
System.out.println(obj);
}
}
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add("Java");
stringList.add("Generics");
List<Double> doubleList = new ArrayList<>();
doubleList.add(3.14);
doubleList.add(1.618);
displayCollection(stringList); // Accepts String type list
displayCollection(doubleList); // Accepts Double type list
}
}
আউটপুট:
Java
Generics
3.14
1.618
Unbounded Wildcard-এর সুবিধা:
- Reusable Methods: বিভিন্ন টাইপের Collections বা Objects এর সাথে কাজ করার জন্য একটি মেথড ব্যবহার করা যায়।
- Flexibility: টাইপ নির্দিষ্ট না থাকলেও কোড চালানো সম্ভব।
- টাইপ Safety: যদিও টাইপ নির্দিষ্ট নয়, তবে শুধুমাত্র ডেটা পড়ার জন্য এটি ব্যবহার করা হয়, ফলে টাইপ-সংক্রান্ত সমস্যা এড়ানো যায়।
সীমাবদ্ধতা (Limitations):
ডেটা Write করা যায় না:
<?>ব্যবহার করে Collections-এ নতুন ডেটা যোগ করা সম্ভব নয়, কারণ টাইপ অজানা। শুধুnullযোগ করা যায়।List<?> list = new ArrayList<>(); list.add("Hello"); // কম্পাইল টাইম ত্রুটি list.add(null); // ঠিক আছে- Read-Only Use: Unbounded Wildcards সাধারণত ডেটা পড়ার জন্য ব্যবহৃত হয়। যদি ডেটা মডিফাই বা Write করার প্রয়োজন হয়, তাহলে Bounded Wildcards (
<? extends T>বা<? super T>) ব্যবহার করা উচিত।
যখন Unbounded Wildcards ব্যবহার করবেন:
- যখন আপনি শুধু Collection-এর উপাদানগুলি পড়বেন।
- টাইপ প্যারামিটার নির্দিষ্ট করার প্রয়োজন নেই।
- কোডের টাইপ-স্বাধীনতা এবং পুনর্ব্যবহারযোগ্যতা বাড়ানোর জন্য।
Java Generics-এ <? extends T> একটি Upper Bounded Wildcard, যা একটি টাইপ প্যারামিটারকে T অথবা T এর সাবক্লাস দ্বারা সীমাবদ্ধ করে। এটি ব্যবহার করা হয় যখন একটি মেথড বা ডেটা স্ট্রাকচারকে নির্দিষ্ট টাইপ অথবা তার সাবক্লাসের জন্য কাজ করতে হয়।
Upper Bounded Wildcard এর গঠন
void methodName(List<? extends T> list) {
// Method body
}
এখানে:
Tহলো একটি টাইপ, যা ক্লাস বা ইন্টারফেস হতে পারে।<? extends T>নির্দেশ করে যে এই টাইপTঅথবা এর সাবক্লাস হতে হবে।
Upper Bounded Wildcard এর ব্যবহার
1. Number এবং তার সাবক্লাসে কাজ করা
import java.util.List;
import java.util.ArrayList;
public class UpperBoundedExample {
public static void printNumbers(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
List<Double> doubleList = new ArrayList<>();
doubleList.add(15.5);
doubleList.add(30.8);
printNumbers(intList); // Integer টাইপের জন্য কাজ করবে
printNumbers(doubleList); // Double টাইপের জন্য কাজ করবে
}
}
আউটপুট:
10
20
15.5
30.8
2. Generic মেথডে Upper Bounded Wildcard ব্যবহার
import java.util.List;
public class UpperBoundedGenericMethod {
public static <T extends Number> double calculateSum(List<T> list) {
double sum = 0;
for (T num : list) {
sum += num.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> intList = List.of(1, 2, 3);
List<Double> doubleList = List.of(2.5, 3.5, 4.5);
System.out.println("Sum of Integers: " + calculateSum(intList));
System.out.println("Sum of Doubles: " + calculateSum(doubleList));
}
}
আউটপুট:
Sum of Integers: 6.0
Sum of Doubles: 10.5
3. ইনহেরিটেন্স সম্পর্কিত উদাহরণ
import java.util.ArrayList;
import java.util.List;
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
public class UpperBoundedInheritance {
public static void makeSound(List<? extends Animal> animals) {
for (Animal animal : animals) {
animal.sound();
}
}
public static void main(String[] args) {
List<Dog> dogList = new ArrayList<>();
dogList.add(new Dog());
makeSound(dogList); // Dog এর জন্য কাজ করবে
}
}
আউটপুট:
Dog barks
Upper Bounded Wildcard এর সুবিধা
- টাইপ সীমাবদ্ধতা:
একটি নির্দিষ্ট টাইপ এবং তার সাবক্লাসের জন্য কোডের পুনরায় ব্যবহারযোগ্যতা বৃদ্ধি করে। - কোড নমনীয়তা:
ডেটা স্ট্রাকচারের মধ্যে ইনহেরিটেন্স অনুযায়ী কাজ করতে দেয়। - টাইপ সেফটি নিশ্চিত:
টাইপ নির্দিষ্ট করার ফলে কম্পাইল-টাইমে এরর এড়ানো যায়।
Upper Bounded Wildcard এর সীমাবদ্ধতা
ডেটা সংযোজন সীমাবদ্ধ:
Upper Bounded Wildcard ব্যবহার করলে লিস্টে নতুন আইটেম যোগ করা যায় না (কেননা এটি সাবক্লাস হতে পারে বলে নিশ্চিত নয়)।List<? extends Number> list = new ArrayList<>(); list.add(10); // কম্পাইল-টাইমে এরর- টাইপ ইরেজার:
টাইপ ইরেজারের কারণে টাইপ চেকিং শুধুমাত্র কম্পাইল-টাইমে হয়, রানটাইমে নয়।
Upper Bounded Wildcard (<? extends T>) একটি শক্তিশালী ফিচার যা জাভা জেনেরিক্সে ইনহেরিটেন্স এবং টাইপ সেফটি নিশ্চিত করে। এটি কোডের পুনরায় ব্যবহারযোগ্যতা এবং নমনীয়তা বৃদ্ধি করে। তবে এটি ব্যবহারের সময় ডেটা সংযোজনের সীমাবদ্ধতা মাথায় রাখতে হবে।
Lower Bounded Wildcards (<? super T>) জাভা জেনেরিক্সের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য। এটি ব্যবহার করা হয় এমন ডেটা টাইপের জন্য যেখানে প্যারামিটারাইজড টাইপটি T বা T-এর সুপারক্লাস হতে পারে।
Lower Bounded Wildcards কী?
<? super T> নির্দেশ করে যে জেনেরিক টাইপটি T বা তার যেকোনো সুপারক্লাস হতে পারে। এটি সাধারণত write operations (ডেটা ইনসার্ট) এর ক্ষেত্রে ব্যবহৃত হয়।
Lower Bounded Wildcards এর সিনট্যাক্স
<? super T>
- এখানে
Tহল টাইপ প্যারামিটার। - এটি
TএবংT-এর সুপারক্লাসগুলিকে গ্রহণ করে।
Lower Bounded Wildcards কেন ব্যবহার করা হয়?
- Write Operations সহজ করতে:
Lower Bounded Wildcards ডেটা ইনসার্টের জন্য সুবিধাজনক, কারণ এটি নিশ্চিত করে যে অবজেক্টটি উপযুক্ত টাইপ বা তার সুপারক্লাসের হবে। - ইনহেরিটেন্স সংক্রান্ত সীমাবদ্ধতা দূর করতে:
এটি ব্যবহার করে আপনি এমন জেনেরিক ডেটা স্ট্রাকচার তৈরি করতে পারেন যা নির্দিষ্ট টাইপ এবং তার সুপারক্লাস উভয়ের সাথে কাজ করতে পারে।
উদাহরণ: Lower Bounded Wildcards
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void addElements(List<? super Integer> list) {
list.add(10);
list.add(20);
list.add(30);
// list.add("String"); // Compile-time error: Only Integer or its superclass is allowed
}
public static void main(String[] args) {
List<Number> numbers = new ArrayList<>();
addElements(numbers);
List<Object> objects = new ArrayList<>();
addElements(objects);
System.out.println(numbers);
System.out.println(objects);
}
}
আউটপুট:
[10, 20, 30]
[10, 20, 30]
Lower Bounded Wildcards এর বৈশিষ্ট্য
- Write Operations:
- আপনি
Tবা তার সাবটাইপ যোগ করতে পারেন। উদাহরণ:
public void addNumbers(List<? super Integer> list) { list.add(10); // Allowed list.add(15); // Allowed }
- আপনি
- Read Operations সীমাবদ্ধ:
- ডেটা পড়ার সময় টাইপ ইনফরমেশন হারিয়ে যায়, তাই Object হিসাবে ডেটা রিটার্ন হয়।
উদাহরণ:
List<? super Integer> list = new ArrayList<>(); list.add(10); Object obj = list.get(0); // Returns Object, not Integer
- Type Compatibility:
<? super T>শুধুমাত্রTএবং তার সুপারক্লাসের সাথে কাজ করে। এটি সাবটাইপগুলির ক্ষেত্রে কার্যকর নয়।
Lower Bounded Wildcards এবং Collections Framework
Lower Bounded Wildcards সাধারণত Collections Framework-এ ব্যবহৃত হয় যেখানে write-heavy অপারেশন দরকার।
উদাহরণ: Collections.sort() এর Lower Bounded Wildcard
import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> intList = Arrays.asList(3, 1, 4, 2);
List<Number> numberList = Arrays.asList(3, 1.5, 4, 2.0);
// Sort Integer List
sortList(intList);
System.out.println(intList);
// Sort Number List
sortList(numberList);
System.out.println(numberList);
}
public static void sortList(List<? super Integer> list) {
list.sort(null); // Uses natural ordering
}
}
আউটপুট:
[1, 2, 3, 4]
[1.5, 2.0, 3, 4]
Lower Bounded Wildcards বনাম Upper Bounded Wildcards
| বৈশিষ্ট্য | Lower Bounded Wildcards (<? super T>) | Upper Bounded Wildcards (<? extends T>) |
|---|---|---|
| রিড অপারেশন | Object টাইপ রিটার্ন করে। | নির্দিষ্ট টাইপ বা তার সাবক্লাস রিটার্ন করে। |
| রাইট অপারেশন | Write-heavy অপারেশন সহজ করে। | Write অপারেশন সীমাবদ্ধ। |
| ইনহেরিটেন্স | T এবং তার সুপারক্লাসের সাথে কাজ করে। | T এবং তার সাবক্লাসের সাথে কাজ করে। |
Lower Bounded Wildcards এর সুবিধা
- টাইপ সেফ ডেটা ইনসার্ট:
নির্দিষ্ট টাইপ বা তার সুপারক্লাস ছাড়া অন্য কোনো টাইপ ইনসার্ট করা যাবে না। - ইনহেরিটেন্সের সমস্যা সমাধান:
Tএবং তার সুপারক্লাস উভয়ের জন্য একই মেথড ব্যবহার করা সম্ভব। - Flexible কোড:
একাধিক টাইপের জন্য একক জেনেরিক মেথড বা ক্লাস ব্যবহার করা যায়।
Lower Bounded Wildcards এর সীমাবদ্ধতা
- Read Operations সীমিত:
টাইপ ইনফরমেশন লোপ পায়, ফলে Object টাইপে ডেটা রিটার্ন হয়। - Type Compatibility আরও সুনির্দিষ্ট হতে পারে:
সব টাইপের সাথে কাজ করে না, শুধুমাত্র সুপারক্লাস বা নির্দিষ্ট টাইপের সাথে কাজ করে।
সংক্ষেপে
- Lower Bounded Wildcards (
<? super T>) এমন ডেটা টাইপ গ্রহণ করে যাTবা তার সুপারক্লাস হতে পারে। - এটি সাধারণত write-heavy অপারেশনের জন্য ব্যবহৃত হয়।
- Collections Framework এবং Generics-সমৃদ্ধ কোডে Lower Bounded Wildcards খুব কার্যকরী।
Generics-এর এই বৈশিষ্ট্যটি টাইপ সেফটি এবং কোড রিইউজেবিলিটির জন্য অত্যন্ত গুরুত্বপূর্ণ।
Read more